﻿/*
 * Ejemplo de Statemanager XNA 4.0
 * 
 * 100% XNA & XNACommunity- 2010
 * http://100xna.wordpress.com/
 * http://xnacommunity.codeplex.com
 * 
 */

using System.Collections.Generic;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;

namespace StateExample
{
    public class Menu
    {

        public List<MenuItem> Items = new List<MenuItem>(); //Lista de opciones disponibles en el menu
        private int currentItem = 0;                                //Opcion del menu seleccionada actualmente

        /// <summary>
        /// Devuelve el item seleccionado actualmente
        /// </summary>
        public MenuItem SelectedItem
        {
            get
            {
                if (Items.Count > 0)
                    return Items[currentItem];
                else
                    return null;
            }
        }

        /// <summary>
        /// Selecciona el siguiente elemento del menu
        /// </summary>
        public void SelectNext()
        {
            if (Items.Count > 0)
            {
                do
                {
                    currentItem = (currentItem + 1) % Items.Count;
                } while (SelectedItem.IsDisabled);
            }
        }

        /// <summary>
        /// Selecciona el anterior elemento del menu
        /// </summary>
        public void SelectPrevious()
        {
            if (Items.Count > 0)
            {
                do
                {
                    currentItem--;
                    if (currentItem < 0)
                        currentItem = Items.Count - 1;
                } while (SelectedItem.IsDisabled);
            }
        }

        /// <summary>
        /// Dibuja los elementos del menu en la pantalla
        /// </summary>
        /// <param name="spritebatch"></param>
        /// <param name="font"></param>
        public void Draw(SpriteBatch spritebatch, SpriteFont fuente)
        {
            spritebatch.Begin();

            for (int i = 0; i < Items.Count; i++)
            {
                MenuItem item = Items[i];
                Vector2 size = fuente.MeasureString(item.Name);

                Vector2 pos = new Vector2(
                    spritebatch.GraphicsDevice.Viewport.Width / 2,
                    spritebatch.GraphicsDevice.Viewport.Height / 2);

                pos -= size * 0.5f;
                pos.Y += i * (size.Y * 1.1f);

                Color color = Color.White;
                if (item == SelectedItem)
                    color = Color.Yellow;
                else if (item.IsDisabled)
                    color = Color.DarkGray;

                spritebatch.DrawString(fuente, item.Name, pos, color);
            }

            spritebatch.End();
        }
        
    }
}
